package com.destin.basic.exception;

/**
 * 异常编码, 1000以下为服务器内部异常
 *
 * @author: destin
 */
public interface ErrorCode {

    /**
     * 失败类型：内部异常
     */
    int FAILED_TYPE_INTERNAL = 500;

    /**
     * 失败类型：业务异常, 默认业务异常码为：20000
     */
    int FAILED_TYPE_BUSINESS = 20000;

    /**
     * 失败类型：请求异常
     */
    int FAILED_TYPE_BADREQUEST = 400;

    /**
     * 未授权
     */
    int FAILED_TYPE_UNAUTHORIZED = 401;

    /**
     * 禁止访问
     */
    int FAILED_TYPE_FORBIDDEN = 403;

    /**
     * 获取异常错误码
     *
     * @return
     */
    int getCode();

    enum SystemDefaultCode implements ErrorCode {
        /**
         * 服务器内部错误
         */
        INTERNAL_SERVER_ERROR(FAILED_TYPE_INTERNAL),

        /**
         * 错误请求
         */
        BAD_REQUEST(FAILED_TYPE_BADREQUEST),

        /**
         * 通用业务异常，应用少用
         */
        BUSINESS_EXCEPTION(FAILED_TYPE_BUSINESS),

        /**
         * 访问未授权
         */
        REQUEST_UNAUTHORIZED(FAILED_TYPE_UNAUTHORIZED),

        /**
         * 访问禁止
         */
        REQUEST_FORBIDDEN(FAILED_TYPE_FORBIDDEN);

        private int code;

        SystemDefaultCode(int code) {
            this.code = code;
        }

        @Override
        public int getCode() {
            return code;
        }
    }
}
